วิธี Deploy จากการ Upload S3 ไปยัง Elastic Beanstalk
ครั้งนี้ผมจะมาแนะนำ วิธี Deploy จากการ Upload S3 ไปยัง Elastic Beanstalk ครับ เนื่องจากว่าการอัปโหลดไฟล์โปรเจกต์ที่มีขนาดใหญ่ไปยัง Elastic Beanstalk โดยตรงจะทำให้ต้องใช้เวลานาน แต่ถ้า Deploy โปรเจกต์โดยอัปโหลดไฟล์ผ่าน URL S3 (URL ที่เก็บไฟล์โปรเจกต์ใน S3 Bucket) ไปยัง Elastic Beanstalk ก็จะทำให้การ Deploy โปรเจกต์ของเราเสร็จอย่างรวดเร็ว ผมเห็นว่าวิธีนี้เป็นวิธีที่น่าสนใจมากๆ จึงอยากมาแนะนำในบทความนี้ครับ ! ไปเริ่มกันเลยครับ
สิ่งที่ต้องมี
- มีไฟล์โปรเจกต์ Laravel บน EC2 (ดูตัวอย่างได้ที่ด้านล่างนี้ครับ)
- EC2 ที่อัปโหลดไฟล์ Zip มีการ ตั้งค่า IAM Role ไว้ (ดูตัวอย่างได้ที่ด้านล่างนี้ครับ)
สร้างไฟล์ Zip และอัปโหลดไปยัง S3
สร้าง Bucket ขึ้นมาเพื่อจัดเก็บไฟล์ Deploy ใน S3 ในตัวอย่างนี้จะใช้ชื่อว่าtinnakorn-upload
จากนั้นให้รันคำสั่งด้านล่างนี้เพื่อสร้างไฟล์ Zip ที่จะใช้ Deploy ครับ (เปลี่ยน [deploy_file_name.zip] ให้เป็นชื่อไฟล์ที่คุณต้องการ เช่น 20220720_1010.zip เป็นต้น)
zip -r
: คำสั่งสร้างไฟล์ zip
-x
: คำสั่งยกเว้นโฟลเดอร์หรือไฟล์เพื่อไม่ให้รวมใน zip
zip -r [deploy_file_name.zip] * .editorconfig .styleci.yml .ebextensions .platform -x \*/.git/\* vendor/\* node_modules/\* public/build/\* public/hot/\* public/storage/\* storage/\*.key Homestead.json Homestead.yaml npm-debug.log yarn-error.log .idea .vscode
อัปโหลดไฟล์ Zip ไปยัง S3 (เปลี่ยน [deploy_file_name.zip] ให้ตรงกับชื่อไฟล์ Zip ของคุณ และเปลี่ยน [bucket_name] ให้เป็นของคุณ)
aws s3 cp [deploy_file_name.zip] s3://[bucket_name]/
เมื่ออัปโหลดไฟล์ Zip ขึ้นไปแล้ว ให้เข้าไปที่ S3 Bucket ของเรา จะเห็นว่ามีไฟล์ Zip ของเราถูกอัปโหลดมาเรียบร้อยแล้วครับ
ขั้นตอนต่อไปคือการ Deploy โปรเจกต์ Laravel จาก S3 Bucket ไปยัง Elastic Beanstalk
Deploy จาก S3 ไปยัง Elastic Beanstalk
ทำการสร้าง Application ใน Elastic Beanstalk เตรียมไว้ และสร้าง Environment ใน Application ของเราครับ
ตัวอย่างการสร้าง Environment : การสร้าง Environment ใน Elastic Beanstalk
ขั้นตอนการ Upload ไฟล์ Zip ของลิงก์นี้มีการเปลี่ยนแปลง ผมจึงเขียนไว้ในขั้นตอนถัดไปครับ
Deploy จาก S3 ไปยัง Elastic Beanstalk
เข้ามาที่ S3 Bucket ของเรา ติ๊ก✅
โปรเจกต์ที่จะใช้ Deploy และคลิกที่Copy URL
นำ URL ที่ Copy มาจาก S3 มาวางที่ ◉ Public S3 URL และทำการตั้งค่า Configure more options ตามที่คุณต้องการ
สรุป
การอัปโหลดไฟล์ Zip ที่เป็นไฟล์โปรเจกต์ไปเก็บที่ S3 Bucket จะใช้เวลาอัปโหลดไม่นาน เช่นถ้ามีไฟล์โปรเจกต์ขนาดใหญ่ที่ต้องการ Deploy ไปยัง Elastic Beanstalk ก็ควรที่จะเลือกใช้วิธีตามบทความนี้ เพราะว่าถ้าไฟล์โปรเจกต์มีขนาดใหญ่แล้วทำการ Deploy ไปยัง Elastic Beanstalk โดยตรงจะทำให้ใช้เวลานานมาก
แต่ถ้าอัปโหลดไฟล์โปรเจกต์ไปยัง S3 Bucket เตรียมไว้ก่อน แล้วทำการ Deploy โดยอัปโหลดไฟล์โปรเจกต์จาก Public S3 URL (URL ไฟล์โปรเจกต์ที่เก็บอยู่ใน S3 Bucket) ก็จะทำให้การ Deploy โปรเจกต์ขนาดใหญ่ไปยัง Elastic Beanstalk เสร็จสิ้นอย่างรวดเร็วนั่นเองครับ